<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>

  <body>
    <script>
      //与let/const一样，不存在变量提升，必须先声明后使用
      // let instance = new SuperType('Tom');//声明SuperType之前使用将报错，打开这行将报错
      
      let name = 'global';

      // let SuperType;//不能重复声明（与let/const一样），打开这行将会报错
      class SuperType {
        constructor(name) {
          this.name = name;
        }

        say() {
          console.log(this);
          console.log(this.name);
        }
      }

      // console.log(typeof SuperType); //function
      // SuperType(); //直接调用报错,ES5的构造函数可以当普通函数直接调用，class只能使用new调用

      
      let instance = new SuperType('Tom');
      instance.say();

      // 类内部定义在严格模式下（了解即可）
      let say = instance.say;
      say();//严格模式下函数中的this是undefined
    </script>
  </body>
</html>
